package com.hk.juc.util;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.CyclicBarrier;

/**
 * CyclicBarrier还提供一个更高级的构造函数CyclicBarrier（int parties，Runnable barrierAction），
 * 用于在[线程到达屏障时，优先执行barrierAction]，方便处理更复杂的业务场景
 */
@Slf4j
public class CyclicBarrierTest2 {

    public static CyclicBarrier cyclicBarrier = new CyclicBarrier(2, new A());

    public static void main(String[] args) {

        //00:18:53.155 [hk-theadPool] INFO com.hk.juc.util.CyclicBarrierTest2 - A 执行了~~~
        //00:18:53.158 [hk-theadPool] INFO com.hk.juc.util.CyclicBarrierTest2 - 1
        //00:18:53.158 [main] INFO com.hk.juc.util.CyclicBarrierTest2 - 2

        new Thread(() -> {
            try {
                cyclicBarrier.await();
            } catch (Exception e) {
                e.printStackTrace();
            }
            log.info("1");
        },"hk-theadPool").start();

        try {
            cyclicBarrier.await();
        } catch (Exception e) {
            e.printStackTrace();
        }
        log.info("2");

    }


    static class A implements Runnable{
        @Override
        public void run() {
            log.info("A 执行了~~~");
        }
    }
}
